<?php

class SumarController extends Controller
{

       /**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

        
	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
		);
	}
        
        

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete','administracion','buscarResponsable','buscarBeneficiarios','beneficiarioInscripto','inscripcion','certificado'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}
        
        

	  /**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer $id the ID of the model to be loaded
	 * @return Sumar the loaded model
	 * @throws CHttpException
	 */
	public function loadModel($id)
	{
		$model=Sumar::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

        
	/**
	 * Performs the AJAX validation.
	 * @param Sumar $model the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='sumar-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
        
        /********************************************************/
        
        /**
	 * Manages all models.
	 */
        
	public function actionAdmin()
	{
           
       
            $model = new Sumar('search');         
	    $model->unsetAttributes();  
            $modelPersona =  new Persona('search'); 
            $modelPersona->unsetAttributes();  
              
		if ((isset($_POST['Sumar'])) && (!empty($_POST['Sumar'])))
			$model->attributes=$_POST['Sumar'];
                else
                 if ((isset($_GET['Sumar'])) && (!empty($_GET['Sumar'])))
			$model->attributes=$_GET['Sumar'];
                 
                 if ((isset($_POST['Persona'])) && (!empty($_POST['Persona'])))
			$modelPersona->attributes=$_POST['Persona'];
                else
                 if ((isset($_GET['Persona'])) && (!empty($_GET['Persona'])))
			$modelPersona->attributes=$_GET['Persona'];
              
		$this->render('admin',array(
			'model'=>$model,
                        'modelPersona'=>$modelPersona,
		));
	}
        
        /**
	 * Manages all models.
	 */
        
	public function actionAdministracion()
	{  
            $model = new Sumar('search');         
	    $model->unsetAttributes();  
            $modelPersona =  new Persona('search'); 
            $modelPersona->unsetAttributes();  
              
		if ((isset($_POST['Sumar'])) && (!empty($_POST['Sumar'])))
			$model->attributes=$_POST['Sumar'];
                else
                 if ((isset($_GET['Sumar'])) && (!empty($_GET['Sumar'])))
			$model->attributes=$_GET['Sumar'];
                 
                 if ((isset($_POST['Persona'])) && (!empty($_POST['Persona'])))
			$modelPersona->attributes=$_POST['Persona'];
                else
                 if ((isset($_GET['Persona'])) && (!empty($_GET['Persona'])))
			$modelPersona->attributes=$_GET['Persona'];
              
		$this->render('administracion',array(
			'model'=>$model,
                        'modelPersona'=>$modelPersona,
		));
	}
        
        /**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */     
        
        
	public function actionBeneficiarioInscripto($id)
	{       
                $this->layout = '//layouts/column1';
                
                
                $beneficiario = $this->loadModel($id);
                
                        //armamos un dataprovider con las prestaciones brindadas al beneficiario
                        //para ello debemos vincularla con las tablas correcpondientes para
                        //mostrar los codigos de las prestaicones y demas
                        /*$criteria = new CDbCriteria;  
                        $criteria->condition='id_beneficiario=:benef';
                        $criteria->params=array(':benef'=>$id);
                        $criteria->order = 'fecha_prestacion DESC';
           
                        $dataProvider = new CActiveDataProvider('PrestacionBrindada', array(
                            'criteria'=>$criteria,
		         ));*/
                
		$this->render( 'beneficiarioInscripto',array(
			       'model'=>$this->loadModel($id),
                               /*'dataProviderPrestaciones'=>$dataProvider,*/
		));
	} 
        
        /**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
        
        
	public function actionInscripcion($id=null)
	{ 
         
          $transaction = Yii::app()->db->beginTransaction();
          $hay_errores = false;
          
          try{  
                $modelPersona = new Persona;                
                
                $modelSumar = new Sumar;              
                $modelSumar->embarazada = 0;
                $modelSumar->semanas_embarazo = 0;  
               
                     //creamos un modelo de persona para guardar los datos del responsable en caso de que sea menor
                $modelResponsable = new Responsable;
           
                // nuevo es una variable que refleja si estamos en una inscripcion o es una modificacion de datos
                $nuevo = true;
                
                
              /*
               * si recibimos un id, disntinto de cero y null; estamos recibiendo el id de un beneficiario para actualizar sus datos
               * en este caso debemos buscar sus datos; para mostrarlo y asi poder actulizarlos.
               * Ademas debemos buscar, y guardar en una variable auxiliar el tipo y numero de documento viejo,
               * para los controles previos.
               */
               
                if (!empty($id)){    
                    $modelSumar = $this->loadModel($id);
                    
                    $modelAudit =  $this->loadModel($id);
                    
                    $modelPersona = Persona::model()->findByPk($id);

                    
                    $localidad_id = $modelPersona->MiMunicipio->id_localidad;
                    $modelPersona->localidad = $localidad_id;


                    $departamento = Localidad::model()->find('id='.$localidad_id);
                    $departamento_id = $departamento->id_departamento;
                    $modelPersona->departamento = $departamento_id;
                    $nuevo = false;

                    if (!empty($modelSumar->id_tutor)){
                        $responsable = Responsable::model()->findByPk($model->id_tutor);
                        $modelSumar->tipo_docTutor =  $responsable->tipodoc;
                        $modelSumar->nro_doc_tutor  = $responsable->nro_documento;
                        $modelSumar->apellidoTutor =    $responsable->apellido;
                        $modelSumar->nombreTutor =    $responsable->nombre ;
                    }
                }
            
                
                
		if((isset($_POST['Sumar'])) && (isset($_POST['Persona'])))
		{       
                    /* Primero Armamos el modelo Persona con los attributos y lo validamos para chequeos posteriores */
                    $modelPersona->attributes=$_POST['Persona'];
                    $modelPersona->departamento = $_POST['Persona']['departamento'];
                    $modelPersona->localidad = $_POST['Persona']['localidad'];
                    $modelPersona->municipio = $_POST['Persona']['id_municipio'];
                    $modelPersona->barrio = $_POST['Persona']['id_barrio'];
                    $validPersona = $modelPersona->validate();
                    
                    if ($validPersona == false)
                        $hay_errores = true;
                        
                       /* Armamos el modelo Sumar con los attributos y lo validamos para su control posterior */
                    $modelSumar->attributes=$_POST['Sumar'];
                    $modelSumar->fecha_nacimiento = $modelPersona->fecha_nacimiento; 
                    $modelSumar->clase_documento = $modelPersona->clase_documento;  
                           
                    if ($nuevo){                         
                        $modelSumar->transaccion = 'A';
                        $modelSumar->id_categoriabeneficiario = $this->obtenerCategoriaBeneficiario($modelPersona->fecha_nacimiento); 
                        $modelSumar->ceb = '1';                           
                        $modelSumar->cuie_ha =  $modelSumar->cuie_ea;     

                        $modelSumar->fecha_ultima_prestacion = '30-12-1899';
                        $modelSumar->usuario_carga = Yii::app()->user->name;
                        $modelSumar->activo = 'X';       
                        $modelSumar->fecha_efectiva_embarazo = "30-12-1899";//ver
                        $modelSumar->fecha_carga = date('d-m-Y');
                        $modelSumar->fecha_inscripcion = $_POST["Sumar"]["fecha_inscripcion"];        
                        $modelSumar->fecha_modificacion = date('d-m-Y'); 
                        $modelSumar->estado_envio  = 'n';                                 
                    }else{
                        $modelSumar->transaccion = 'M';
                        $modelSumar->usuario_carga = Yii::app()->user->name;
                        $modelSumar->fecha_modificacion = date('d-m-Y');  
                        $modelSumar->estado_envio  = 'n'; 
                            
                        $datosModificados = '';
                        foreach($modelSumar->attributes as $key => $value){
                          if(isset($modelAudit->$key)){ 
                            $r = $modelAudit->$key;
                            if($value != $modelAudit->$key)
                               //guardamos lo viejo para saber que estba antes y poder respaldarlo
                               $datosModificados .= "[".$key. ":  ".$modelAudit->$key."],";
                         }
                       }//fin del foreach
                    }//fin del else if nuevo
                    
                    
                    $validResponsable = false;
                    $conResponsable = false;
                    
                    //si es menor de edad debemos verificar los datos del responsable para insertarlo
                    if (!empty($modelSumar->fecha_nacimiento)){                          
                        list($diaNac, $mesNac, $anioNac) = explode("-",$modelSumar->fecha_nacimiento);

                        $anioHoy = date("Y");
                        $mesHoy = date("m");
                        $diaHoy = date("d");
                        $edad = $anioHoy - $anioNac;
                        if ($mesHoy <    $mesNac)
                            $edad = $edad - 1;
                        else
                        if (($mesHoy == $mesNac) && ($diaHoy < $diaNac))
                            $edad = $edad - 1; 

                        if ($edad<10){
                            $conResponsable = true;
                            $modelResponsable->attributes=$_POST['Responsable'];
                            $modelResponsable->observacioninterna = ' - CARGADO COMO RESPONSABLE -';   
                            
                            $modelResponsable->id_barrio = -1;
                            $modelResponsable->id_municipio = -1;
                            $modelResponsable->calle = 'SIN DATO';
                            $modelResponsable->nro_calle = 0;
                            $validResponsable = $modelResponsable->validate();
                            
                            if ($validResponsable){
                              $modelResponsable->save();
                              }else
                               $hay_errores = true;         
                                 
                      }
                    } // fin del if con responsable
                    
                    //si los datos estan correctos, guardamos el modelo persona y pasamos a trabajar con el de sumar
                    if($validPersona){
                        $modelPersona->save();
                        $modelPersona->fecha_nacimiento = Persona::convertirFormatoFecha($modelPersona->fecha_nacimiento);

                        /* asignamos el identificador de personas al modelo de sumar */
                        $modelSumar->id_persona = $modelPersona->id; 
                        
                        if ($conResponsable)
                            $modelSumar->id_responsable = $modelResponsable->id;
                        
                        if ($hay_errores)
                          $validSumar = false;
                            else
                             $validSumar =  $modelSumar->validate(); 

                        if ($validSumar){                               
                            $modelSumar->save();                             
                            $transaction->commit();
                            $this->redirect(array('BeneficiarioInscripto','id'=>$modelSumar->id_persona));
                        }else
                           $transaction->rollBack();   
                    }//fin del $validpersona
                       else  
                          $transaction->rollBack(); 
               }//FIN DEL IF POST

		$this->render('create',array(
			 'model'=>$modelSumar,
                         'modelPersona'=>$modelPersona,
                         'modelResponsable'=>$modelResponsable
		));
	
        }catch(CDbException $e)
           {
            $transaction->rollBack();
           
           
            if(!isset($_GET['ajax']))
                Yii::app()->user->setFlash('error','ERROR!!! No se puedo realizar la eliminacion!!!');
            else{
                {
                 echo CJSON::encode(array(
                         'result'=>0,
                        ));
                    Yii::app()->end(); 
                    exit;
               }
            }
           }
        }
        
        
        
        
         /*******************************************************************/
         /*******************************************************************/
        
        /*
         * Acccion que es llamada a traves de una peticion ajax, encargada de buscar a traves de una consulta
         * en la tabla de beneficiarios, registros que coincidan con la variable numero de documento parametrizada.
         * 
         * En caso de encontrar registros estos son devueltos mediante un objeto JSON en un array de registros.
         * 
         * Concluyendo la funcion se encarga de buscar beneficiarios con el mismo numero de documento y tipo, en la tabla
         * de beneficiarios para devolverlos mediante un array de objetos JSON.
         */
        
        public function actionBuscarBeneficiarios() {  
         
            $docBeneficiarios =   trim($_POST['Persona']['numero_documento']);
            $tipoDoc = (int) $_POST['Persona']['id_tipodocumento'];
             
            
            $criteria=new CDbCriteria; 
            $criteria->mergeWith(array(
                'join'=>'LEFT JOIN uad.persona per ON per.id = t.id_persona',
                'condition'=>'(per.id_tipodocumento = '.  $tipoDoc .') and (per.numero_documento ILIKE \'%'. strtolower($docBeneficiarios) . '%\')',
            ));


           $resultados = Sumar::model()->findAll($criteria);
            
           $datos = array();
           $i = 0;
            
           //recorremos los datos devueltos por la consulta, para armar el objeto json, y asi retornarlos a la peticion
            foreach ($resultados as $key => $value) {
                $i = $i +1;
                $datos[$i]['nombre'] = $value->MiPersona->nombre;
                $datos[$i]['apellido'] = $value->MiPersona->apellido;
                $datos[$i]['tipodocumento'] = $value->MiPersona->MiTipoDocumento->siglas;
                $datos[$i]['nrodocumento'] = $value->MiPersona->numero_documento;
                $clase_documento = $value->MiPersona->clase_documento;
                
                if (($clase_documento=='P') || ($clase_documento=='p'))
                 $datos[$i]['clase_documento'] = 'Propio';
                else
                 $datos[$i]['clase_documento'] = 'Ajeno';   
                 $datos[$i]['fechanacimiento'] = $value->MiPersona->fecha_nacimiento;                       
                 $datos[$i]['link_actualizar'] = CController::createUrl('sumar/inscripcion');
                 $datos[$i]['link_datos'] = Yii::app()->createUrl('sumar/beneficiarioInscripto', array('id' => $value->id_persona));
            }          
         
            echo CJSON::encode(
                    $datos 
                    );               
                    exit;           
           } // FIN del action Buscarbeneficiarios
           
        /*
         * Accion que es llamada a traves de una peticion AJAX al ingresar un numerod e documento en el formulario de inscripcion.
         * Al ingresar un documento en el campo correspondiente para el mismos, se realiza una peticion ajax,
         * enviando el mimso campo es decir el documento.
         * La funcion lo que realiza es buscar en la tabla de beneficiarios si existe alguno de ellos con el mismo,
         * numero de documento, en caso de encontrar a estos, arma un array con los datos basicos de los mismos
         * y lo devuelve como un objeto JSON, el cual sera procesado mediante JQUERY en el propio formulario.
         */
       
        public function actionBuscarResponsable(){
            
          $docResponsable =  $_POST['Responsable']['numero_documento'];
          $tipo_doc_tutor =  $_POST['Responsable']['id_tipodocumento'];          
          
          $criteria = new CDbCriteria();
          $criteria->condition = "numero_documento LIKE :nro_doc and id_tipodocumento = :tipodoc";
          $criteria->params = array(':nro_doc'=> $docResponsable, ':tipodoc'=> $tipo_doc_tutor);
           
          $resultados = Persona::model()->find($criteria);             
          $responsables = array();
          $responsables['nombre'] = '';
          $responsables['apellido'] = ''; 
          
          if (!empty($resultados))
          {
            $responsables['nombre'] = $resultados->nombre;
            $responsables['apellido'] = $resultados->apellido;              
          }   
          
          echo CJSON::encode(
                $responsables 
                );               
                exit;           
        }
        
         /*
             * Funcion privada que parametrizando un variable con un valor de una fecha,
             * obtiene segun la cantidad de aÃ±os entre esa fecha y la actual la categoria a la que se obtiene.
             * 
             * Segun ese rango de edad, la categoria va a ser categoria 5 si es menor a los 20 aÃ±os sino es categoria 6
             */            
            private function obtenerCategoriaBeneficiario($fechaNacimiento)
            {
                $fechaNacimiento = Sumar::convertirFormatoFecha($fechaNacimiento);
             
                list($anioNac,$mesNac,$diaNac) = explode("-",$fechaNacimiento);
              
                $anioHoy = date("Y");
                $mesHoy = date("m");
                $diaHoy = date("d");
              
                $edad = $anioHoy - $anioNac;
                if ($mesHoy <    $mesNac)
                    $edad = $edad - 1;
                else
                if (($mesHoy == $mesNac) && ($diaHoy < $diaNac))
                    $edad = $edad - 1; 
                
                if ($edad < 20)
                    $categoria = 5;
                else
                    $categoria = 6;
              
                return $categoria;
            } 
            
        
        
        
        
    
}
